/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package busquedaProfundidad;

/**
 *
 * Esta clase modela el estado del tablero
 */
public class Nodo {

    public int[][] Posicion; //Matriz representativa de la situacion del tablero
    public int[][] Peso; //Matriz de pesos
    public int costo;
    public int acum20; //Usado para podar la rama y evitar recorrer caminos innecesarios cuando se pisan muchos ceros

    public Nodo (int [][] matrizInicial){
        // Aca cargamos los valores de la matriz de posiciones actual
        Posicion = new int [8][8];
        Peso = new int[8][8];
        for (int i=0; i<8; i++){
            for (int j=0; j<8; j++){
                Posicion[i][j] = matrizInicial [i][j];

            }
        }
        // ahora cargamos la matriz de peso actual
         for (int i=0; i<8; i++){
            for (int j=0; j<8; j++){
               if (Posicion [i][j] == 0){
                   Peso [i][j] = 20;

               }else {
                   if (Posicion [i][j]==1) {
                       // el valor 10 nos indica que hay un caballo blanco
                       Peso [i][j] =10;

                   }else {
                       // el valor 20 nos indica que no hay caballos
                       Peso [i][j]=20;
                   }

               }

            }
        }

    }

    public void modificarPosicion (int i, int j, int valor){
        // Este metodo modifica el valor de la posicion en la que se encuentra.
        getPosicion()[i][j] = valor;


    }
    public void modificarPeso (int i, int j, int peso){
        // Este metodo modifica el valor del peso en la posicion en la que se encuentra.
        getPeso()[i][j] = peso;
    }

    public void acumular (){
        // Aca acumulamos la cantidad de veces que se movio a una posicion vacia.
        this.acum20++;

    }
    public void calcularCostoNuevo (int costoViejo, int peso){
        // Aca sumamos los costos de las posiciones que nos vamos moviendo.
        
        int nuevoCosto;
        nuevoCosto = costoViejo + peso;
        this.costo = nuevoCosto;
    }

    //metodo que determina la fila del caballo negro
    public int filaCN(){
        int fila = 0;
        for(int i=0;i<8;i++){
            for(int j=0;j<8;j++){

                if(this.getPosicion()[i][j]==2){
                    fila = i;
                }
            }
        }

        return fila;

    }

    //metodo que devuelve la columna del caballo negro
    public int colCN(){

        int col = 0;

        for(int i=0;i<8;i++){
            for(int j=0;j<8;j++){

                if(this.getPosicion()[i][j]==2){
                    col = j;
                }
            }
        }

        return col;

    }

    /**
     * @return the Posicion
     */
    public int[][] getPosicion() {
        return Posicion;
    }

    /**
     * @param Posicion the Posicion to set
     */
    public void setPosicion(int[][] Posicion) {
        this.Posicion = Posicion;
    }

    /**
     * @return the Peso
     */
    public int[][] getPeso() {
        return Peso;
    }

    /**
     * @param Peso the Peso to set
     */
    public void setPeso(int[][] Peso) {
        this.Peso = Peso;
    }

    /**
     * @return the costo
     */
    public int getCosto() {
        return costo;
    }

    /**
     * @param costo the costo to set
     */
    public void setCosto(int costo) {
        this.costo = costo;
    }

    /**
     * @return the acum20
     */
    public int getAcum20() {
        return acum20;
    }

    /**
     * @param acum20 the acum20 to set
     */
    public void setAcum20(int acum20) {
        this.acum20 = acum20;
    }
    //Método para devolver los valores de la matriz del tablero
    public void mostrarValores(){
        System.out.println("Matriz de Posiciones del tablero");
        for(int i=0;i<8;i++){
            for(int j=0;j<8;j++){
                System.out.print(this.Posicion[i][j]);
            }
            System.out.println();
        }
        System.out.println("Costo " + this.getCosto());
        System.out.println("Acum 20 " + this.getAcum20());
    }

}
